Rapport-ATL-3


EJB ?

EJB (Enterprise Java Beans) est une technologie de composants distribués pour les applications d'entreprise. Les EJB sont des objets logiciels qui encapsulent le traitement métier et la logique de l'application, fournissant ainsi une abstraction entre les couches de présentation et de persistance des données. Les EJB permettent une conception modulaire de l'application, en permettant aux développeurs de diviser le code en modules réutilisables et indépendants les uns des autres. En outre, ils offrent des fonctionnalités telles que la gestion de la transaction, la sécurité, la gestion des erreurs et la gestion des threads, qui sont essentielles pour les applications d'entreprise.


JBOSS

JBoss est une plateforme de développement et d'exécution d'applications open source basée sur la technologie J2EE. JBoss fournit un environnement d'exécution pour les applications J2EE, avec une prise en charge complète des spécifications J2EE telles que les EJB, Servlets, JSP et JMS. La plateforme est extensible et personnalisable grâce à l'utilisation de modules et de plug-ins, permettant aux développeurs de créer des applications sur mesure pour répondre à leurs besoins spécifiques.

L'un des avantages clés de JBoss est sa haute disponibilité et sa scalabilité. La plateforme offre des fonctionnalités de clustering et de répartition de charge, ce qui signifie qu'elle peut gérer de grandes quantités de trafic et de demandes simultanées. En outre, JBoss est sécurisé grâce à ses fonctionnalités de gestion des utilisateurs et des rôles, qui permettent un contrôle précis de l'accès aux applications.


Project Flow


Maven Dependecies

<dependencies>
        <dependency>
            <groupId>javax.ejb</groupId>
            <artifactId>javax.ejb-api</artifactId>
            <version>3.2.2</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>5.6.1.Final</version>
        </dependency>
        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>3.1.2</version>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.18.26</version>
            <scope>provided</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-api</artifactId>
            <version>2.20.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.logging.log4j</groupId>
            <artifactId>log4j-core</artifactId>
            <version>2.20.0</version>
        </dependency>
    </dependencies>

Technologies Used


Creation du EJB

  1. Définissez l'interface pour votre EJB. Cette interface doit contenir les méthodes que votre composant EJB exposera aux clients de l'application.
  1. Implémentez l'interface en tant que classe EJB. Cette classe doit être annotée avec l'annotation @Stateless, @Stateful ou @Singleton, qui indique le type de composant EJB que vous créez.
  1. Dans votre application Java EE, vous pouvez accéder à l'EJB en l'injectant dans une autre classe à l'aide de l'annotation @EJB. Vous pouvez alors appeler les méthodes de l'EJB comme n'importe quelle méthode Java.
  1. Les composants EJB sont gérés par le conteneur EJB de l'application Java EE. Le conteneur EJB fournit des services tels que la gestion du cycle de vie des composants EJB, la gestion des transactions et la sécurité. Cela permet aux développeurs de se concentrer sur la logique métier de leur application, plutôt que sur les détails de la gestion des composants EJB.


L’interface Facade

La classe StudentRegistrationBean est une interface qui expose deux méthodes pour interagir avec les entités Student dans une base de données. L'annotation @Remote indique que cette interface doit être accessible depuis un client distant.

La méthode registerStudent permet d'insérer un nouvel étudiant dans la base de données, en prenant en paramètre une instance de la classe Student.

La méthode getStudent permet de récupérer un étudiant de la base de données en fonction de son identifiant, en renvoyant une instance de la classe Student.

Cette classe doit être implémentée en tant que composant EJB dans l'application Java EE. Les clients de l'application peuvent accéder à cette interface en l'injectant à l'aide de l'annotation @EJB, puis en appelant ses méthodes comme n'importe quelle méthode Java. Le conteneur EJB de l'application gère la gestion du cycle de vie de ce composant, ainsi que la persistance des entités Student dans la base de données.

package me.ynabouzi.atelier3.controllers;

import me.ynabouzi.atelier3.entities.Student;
import javax.ejb.Remote;

@Remote
public interface StudentRegistrationBean {
    // for inserting a student in the database
    void registerStudent(Student std);
    // for getting a student from the database
    Student getStudent(int id);
}

Class EJB

The SubmitRegistrationEJB class uses the JPA EntityManager to persist and retrieve Student objects in the database. The EntityManager is obtained using the EntityManagerHelper class, which provides a static method to obtain an EntityManager instance.

The registerStudent method is responsible for inserting a Student object into the database. It first begins a transaction, then persists the Student object using the EntityManager, and finally commits the transaction. If an exception occurs during the transaction, the transaction is rolled back and an error message is printed to the console.

The getStudent method retrieves a Student object from the database using its id property. This method simply calls the find method of the EntityManager and returns the resulting Student object.

package me.ynabouzi.atelier3.controllers;


import me.ynabouzi.atelier3.entities.Student;
import me.ynabouzi.atelier3.manager.EntityManagerHelper;

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

@LocalBean
@Stateless
public class SubmitRegistrationEJB implements StudentRegistrationBean {
    @PersistenceContext(unitName = "default")
    private static final EntityManager em = EntityManagerHelper.getEntityManager();

    @Override
    public void registerStudent(Student std) {
        System.out.println("! Inserting Data !\n==================================================");
        try{
            em.getTransaction().begin();
            em.persist(std);
            em.getTransaction().commit();
            System.out.println("! Opperation Successful !\n==================================================");
        } catch (Exception e)
        {
//            em.getTransaction().rollback();
            System.out.println("Opperation Unsuccessful");
            System.out.println("Here are some errors that might help\n"+e);
        }
        finally {
            em.close();
        }
    }

    @Override
    public Student getStudent(int id) {
        return em.find(Student.class, id);
    }
}

EntityManager

package me.ynabouzi.atelier3.manager;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;

public class EntityManagerHelper {
	private static final EntityManagerFactory emf;
	static {
		emf = Persistence.createEntityManagerFactory("default");
	}
	public static EntityManager getEntityManager() {
		return emf.createEntityManager();
	}
}

La classe nommée EntityManagerHelper qui a une méthode statique appelée getEntityManager(). Cette méthode crée et renvoie un objet EntityManager qui est utilisé pour interagir avec la base de données.

Pour créer cet objet EntityManager, la méthode utilise une instance statique de EntityManagerFactory nommée emf. Cette instance est créée en utilisant la méthode statique createEntityManagerFactory() de la classe Persistence. Le paramètre default spécifié dans la méthode createEntityManagerFactory() correspond à l'unité de persistance nommée "default" définie dans le fichier persistence.xml.

En utilisant cette méthode statique getEntityManager(), les autres classes peuvent facilement récupérer un objet EntityManager et utiliser les méthodes fournies par JPA pour interagir avec la base de données.


Entity

@Data
@NoArgsConstructor
@AllArgsConstructor
@ToString
@Entity
@Table(name = "student", schema = "ATELIER3")
public class Student {
		@GeneratedValue(strategy = GenerationType.IDENTITY)
		@Id
		@Column(name = "Id", nullable = false)
		private int Id;
		@Basic
		@Column(name = "FirstName", nullable = true, length = 20)
		private String FirstName;
		@Basic
		@Column(name = "LastName", nullable = true, length = 20)
		private String LastName;
		@Basic
		@Column(name = "BirthDate", nullable = true)
		private String BirthDate;
		@Basic
		@Column(name = "CIN", nullable = true, length = 10)
		private String CIN;
		@Basic
		@Column(name = "PhoneNumber", nullable = true, length = 12)
		private String PhoneNumber;
		@Basic
		@Column(name = "Email", nullable = true, length = 30)
		private String Email;
}


Servlet

package me.ynabouzi.atelier3.server;

import me.ynabouzi.atelier3.controllers.SubmitRegistrationEJB;
import me.ynabouzi.atelier3.entities.Student;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;


@WebServlet(name = "SubmitRegistration", value = "/register")

public class SubmitRegistrationServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;
    public SubmitRegistrationServlet() {
        super();
    }
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // Create a student object from the data submited from the form.
        Student student = new Student();
        student.setLastName(request.getParameter("lastname"));
        student.setFirstName(request.getParameter("firstname"));
        student.setCIN(request.getParameter("CIN"));
        student.setEmail(request.getParameter("email"));
        student.setBirthDate(request.getParameter("birthdate"));
        student.setPhoneNumber(request.getParameter("Phone Number"));

        // Set an attribute to send it in an HTTP request to another JSP page
        request.setAttribute("student", student);

        // Create an instantiation of the EJB class
        SubmitRegistrationEJB JPA = new SubmitRegistrationEJB();

        // Call the methode registerStudent() to insert the student in the DB
        JPA.registerStudent(student);

        // Redirect to success.jsp with the result.
        RequestDispatcher rd = request.getRequestDispatcher("success.jsp");
        rd.forward(request, response);
//        doGet(request, response);
    }
}

Le code est un servlet Java qui gère une requête POST pour enregistrer un étudiant dans une base de données. Voici une description courte:


Result


Ressources


Made with Love 🦢

by @NBGamer